package com.murong.ai.coder.domain.database;

import com.murong.ai.coder.domain.database.sqlhandler.MySqlHandler;
import com.murong.ai.coder.domain.database.sqlhandler.OracleSqlHandler;
import com.murong.ai.coder.domain.database.sqlhandler.PostgresqlHandler;
import com.murong.ai.coder.entity.DbConfig;
import com.murong.ai.coder.entity.GlobalProperties;
import com.murong.ai.coder.entity.TableEntity;
import com.murong.ai.coder.enums.StatusEnum;
import com.murong.ai.coder.infrastructure.converter.DatabaseConvert;
import com.murong.ai.coder.infrastructure.msgcode.CrResult;
import com.murong.ai.coder.infrastructure.repository.dao.TableRecordDao;
import com.murong.ai.coder.infrastructure.repository.po.TableRecordPO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class PreSqlExecuteService {

    @Autowired
    TableRecordDao dao;
    @Autowired
    GlobalProperties globalProperties;

    public CrResult<TableRecordPO> handleSql(String sql, DbConfig config) {
        if (config == null || sql == null) return null;
        String driver = config.getDriver();
        if (driver == null) return null;
        driver = driver.toLowerCase();

        TableEntity table=null;
        // 这里只处理oracle建表
        if (driver.contains("oracle")) {
            if (sql.trim().toLowerCase().contains("create table")) {
                table = OracleSqlHandler.handlerCreateTable(sql);
                table.setUpdateBy(globalProperties.getOperator().getName());
            }
        }
        // 新增：处理mysql建表
        else if (driver.contains("mysql")) {
            if (sql.trim().toLowerCase().contains("create table")) {
                table = MySqlHandler.handlerCreateTable(sql);
                table.setUpdateBy(globalProperties.getOperator().getName());
            }
        }
        // 新增：处理postgresql建表
        else if (driver.contains("postgres")) {
            if (sql.trim().toLowerCase().contains("create table")) {
                table = PostgresqlHandler.handlerCreateTable(sql);
                table.setUpdateBy(globalProperties.getOperator().getName());
            }
        }

        CrResult<TableRecordPO> crResult = new CrResult<>();
        //数据持久化
        if(table!=null){
            TableRecordPO po = DatabaseConvert.toRecordPO(table);
            po.setExecsqlJson(sql);
            po.setStatus(StatusEnum.INIT.getKey());
            dao.save(po);
            crResult.setResult(true);
            crResult.setData(po);
            return crResult;
        }

        crResult.setResult(true);
        return crResult;
    }

}
